Höhere Analysis und Numerik¶
Das Skript zum Modul „Höhere Analysis und Numerik“ ist ein interaktives Skript. Die Codes sind direkt ausführbar.
Bemerkung
Das Skript zum Modul ist am entstehen.
Der Funktionalanalysis Teil des Skripts folgt dem Buch [BWHM10]. Für Details und Ergänzungen wird das Buch empfohlen. Es steht als pdf-Download in der Bibliothek der ZHAW zur Verfügung.
Sehr viel zusätzliches Material steht auf ngsolve.org bezüglich NGSolve und finite Elemente Methoden (FEM) zur Verfügung. Das Skript lehnt sich stark an diese Inhalte.
Einführung¶
Wir werden uns in diesem Modul mit
Partiellen Differentialgleichungen PDE (partial differential equation)
Numerischen Methoden für PDE
und den notwendigen Grundlagen
beschäftigen. Um einen kleinen Einblick und Motivation in die Thematik zu gewähren, starten wir mit ein paar Beispielen:
Poisson Gleichung¶
Das folgende Beispiel folgt dem analogen aus dem interaktiven Kurs von Joachim Schöberl [SHL21].\(\DeclareMathOperator{\opdiv}{div}\) \(\DeclareMathOperator{\setR}{R}\)
Problemstellung, Differentialgleichung¶
Die Methode der finiten Elemente ist eine Methode für die numerische Berechnung von Lösungen partieller Differentialgleichungen. Eine sehr wichtige Gleichung ist die Poisson Gleichung. Sie kann als Verallgemeinerung des eindimensionalen Randwertproblem
interpretiert werden. Die Poisson Gleichung ist gegeben durch
wobei \(\Omega\subset \mathbb{R}^n\) ein mehrdimensionales Gebiet im \(\mathbb{R}^n\) ist.
Die Poisson Gleichung ist ein Modell für verschiedene physikalische Phenomene. So kann zum Beispiel:
\(f\) kann eine Verteilung einer Wärmequelle und \(u\) die Temperatur
\(f\) kann auch eine Verteilung der elektrischen Ladung und \(u\) entsprechend das elektrostatische Potential.
Um eine eindeutige Lösung \(u\) zu erhalten, müssen Randbedingungen definiert werden. Im Beispiel werden wir die homogene Dirichlet Randbedingung benutzen:
Das zur Gleichung (1) analoge Randwertproblem ist in dem Fall für die Poisson Gleichung gegeben durch
Um eine numerische Lösung des Randwertproblems zum Beispiel im zweidimensionalen Raum berechnen zu können, müssen wir das Gebiet diskretisieren (Meshing). Wir betrachten das Problem auf dem Einheitsquadrat:
from netgen.geom2d import unit_square
from ngsolve import *
from ngsolve.webgui import Draw
mesh = Mesh(unit_square.GenerateMesh(maxh=0.1))
Draw(mesh);
Schwache Gleichung¶
Für die numerische Berechnung benötigen wir die schwache Gleichung (oder auch variationelle Formulierung) der Poisson Gleichung. Die oben formulierte partielle Differentialgleichung des Randwertproblems wird starke Gleichung genannt. Die schwache Gleichung ist die Ausgangsformulierung für die Diskretisierungsmethode der finiten Elemente.
Ein Weg auf die schwache Gleichung zu kommen ist folgender: Multipliziere die partielle Differentialgleichung mit einer sogenannten Testfunktion. Die Testfunktion ist eine beliebige Funktion aus einem geeigneten Funktionenraum \(V\). Multiplikation der PDE mit \(v\in V\) liefert
Nun integrieren wir über das gesamte Gebiet \(\Omega\):
Mit Hilfe der partiellen Integration im Mehrdimensionalen (Satz von Gauss auf das Vektorfeld \(\nabla u\, v\) angewandt):
können wir die linke Seite in der Form
schreiben.
Im Fall der Dirichlet Randbedingung können wir Testfunktionen \(v\) benutzen, für welche \(v(x) = 0\) auf dem Rand \(\partial\Omega\) gilt.
Wir erhalten damit das schwache Problem: Finde \(u\in V\) so, dass \(u=0\) auf \(\partial\Omega\) und
für alle Testfunktionen \(v\) mit \(v=0\) auf \(\partial\Omega\) erfüllt ist.
Der Gewinn der schwachen Formulierung ist, dass wir das Problem mit der zweiten örtlichen Ableitung auf ein Problem mit erster Ableitung reduzieren können. Was natürlich die Frage aufwirft, wann eine schwache Lösung (Lösung der schwachen Gleichung) auch eine starke Lösung ist?
Der Sobolev Raum \(H^1\), linear und bilinear Formen¶
Der für das Beispiel geeignete Funktionenraum für die Lösungen ist der Sobolev Raum
Das hochgestellte 1 bezieht sich auf die erste Ableitung, welche quadratisch integrierbar sein soll (\(L_2\)). Wir werden den Ableitungsbegriff für die Anwendung erweitern müssen, denn nicht alle Funktionen im \(L_2\) sind nicht stetig differenzierbar. Die zum Vektorraum \(H^1\) zugehörige Norm ist gegeben durch
und für das Skalarprodukt gilt
Der Funktionenraum \(H^1\) ist ein vollständiger Raum mit Skalarprodukt. Einen solchen Raum nennt man Hilbert Raum.
Es macht keinen Sinn Randwerte von \(L_2\) Funktionen zu definieren. Für Funktionen aus dem Sobolev Raum \(H^1\) existiert jedoch das Trace Theorem, welches besagt, dass Randwerte wohl definiert sind. Es gilt für \(u\in H^1(\Omega)\)
Damit macht es Sinn einen Unterraum \(H_0^1\) mit homogenen Dirichlet Randbedingungen zu definieren
Wir betrachten nun die Gleichung (3). Die linke Seite stellt eine Bilinearform \(A: H^1\times H^1 \to \mathbb{R}\)
dar und die rechte Seite eine Linearform \(f:H^1 \to \mathbb{R}\)
Wir können damit das schwache Problem auch wie folgt beschreiben
Dieser abstrakte Formalismus von Hilber Räumen, Bilinear- und Linearformen passt auf eine sehr grosse klasse von (elliptischen) partiellen Differentialgleichungen.
Finite Elemente Methode¶
Die schwache Formulierung ist die Ausgangsform für die Methode der finiten Elemente. Da wir nicht in einem unendlich dimensionalen Hilbertraum rechnen können, müssen wir einen endlich dimensionalen Unterraum benutzen.
V = H1(mesh, order=1, dirichlet = '.*')
u,v = V.TnT()
Wir suchen nun Lösungen für schwache Problem (4) im endlich dimensionalen Vektorraum \(V_h\):
Die finite Elemente Lösung approximiert die exakte Lösung \(u\), wobei der Diskretisierungsfehler \(\|u-u_h\|_{H^1}\) für \(h\to 0\) ebenfalls gegen Null streben soll.
Um die Lösung \(u_h\) berechnen zu können, müssen wir eine Basis \(p_i, i=1,\ldots, N\) für den Funktionenraum \(V_h\) wählen, wobei \(N = \mathop{dim} V_h\).
print('dim V = N = ',V.ndof)
dim V = N = 137
\(u_h\) können wir daher als
schreiben. Die Koeffizienten \(u_i\) schreiben wir als Koeffizientenvektor \(u=(u_1, \ldots, u_n) \in \mathbb{R}^N\).
gfu = GridFunction(V)
Anstatt, dass wir mit allen Funktionen aus dem \(V_h\) test, reicht es mit den Basisfunktionen \(p_j(x)\) zu testen. Damit haben wir das finite Element Problem
Da \(A(\cdot, \cdot)\) eine Bilinearfunktion ist, können wir die Summe aus der Bilinearfunktion nehmen. Es folgt
Da die Basisfunktionen \(p_i\) bekannt sind, können wir die Matrix \(A\in\mathbb{R}^{N\times N}\) welche die Bilinearfunktion beschreibt berechnen. Die Matrix Einträge sind gegeben durch
a = BilinearForm(V)
a += grad(u)*grad(v)*dx
a.Assemble();
Die Linearform \(f\) kann durch den Vektor \(f\in\mathbb{R}^N\)
beschrieben werden.
funcf = CoefficientFunction(10)
f = LinearForm(V)
f += funcf*v*dx
f.Assemble();
Das Lösen des finite Elementproblems (6) resultiert somit im Lösen des linearen Gleichungssystems
gfu.vec.data = a.mat.Inverse(freedofs=V.FreeDofs()) * f.vec
Draw(gfu);
Variable Koeffizienten¶
Das folgende Beispiel folgt dem analogen aus dem interaktiven Kurs von Joachim Schöberl [SHL21].\(\DeclareMathOperator{\opdiv}{div}\) \(\DeclareMathOperator{\setR}{R}\)
from ngsolve import *
from ngsolve.webgui import Draw
Problem¶
Ein Setup mit unterschiedlicher Wärmeleitungskoeffizienten wir mit Hilfe der Gleichung
modelliert, wobei \(\lambda=\lambda(x)\) der ortsabhängige Wärmeleitungskoeffizient ist. Der zugehörige Wärmefluss
ist gegeben durch den Gradient der Temperatur \(\nabla u\). Im Fall, dass \(\lambda\) diskontinuierlich ist, wird die Gleichung im Sinne von Distributionen verstanden. Dies beinhaltet Interface Bedingungen: Die Temperatur auf der linken und rechten Seite sind gleich und der Wärmefluss der linken in die rechte Seite müssen gleich gross sein:
Die variationelle Form des Problems ist gegeben durch: finde \(u \in H^1(\Omega)\) mit
Diskontinuierliche Koeffizienten bilden kein Problem. Beide Interface Bedingungen werden erfüllt:
Stetigkeit der Temperatur \(u\) durch die Stetigkeit der Ansatzfunktionenraumes
Stetigkeit des Wärmeflusses in einem schwachen Sinne, durch Neumann Randbedingungen.
Geometrie und Mesh¶
from netgen.geom2d import *
geo = SplineGeometry()
geo.AddRectangle( (0,0), (1,1), leftdomain=1, rightdomain=0,
bcs=['b','r','t','l'])
geo.AddCircle( (0.3,0.7), 0.1, leftdomain=2, rightdomain=1)
geo.AddRectangle ( (0.2,0.2), (0.9,0.3), leftdomain=3, rightdomain=1)
geo.SetMaterial(1, "air")
geo.SetMaterial(2, "source")
geo.SetMaterial(3, "bar")
mesh = Mesh(geo.GenerateMesh(maxh=0.03))
mesh.Curve(3)
Draw (mesh);
Die Subdomains (Materials) sind gegeben durch:
print (mesh.GetMaterials())
('air', 'source', 'bar')
Die Geometrie hat folgende Ränder (innere und äussere):
print (mesh.GetBoundaries())
('b', 'r', 't', 'l', 'default', 'default', 'default', 'default', 'default', 'default', 'default', 'default')
V = H1(mesh, order=3, dirichlet="b|r")
u = V.TrialFunction()
v = V.TestFunction()
Wir definieren nun das Material in dem wir den Wärmekoeffizient stückweise konstant ansetzen:
lamvalues = { "air" : 1, "bar" : 1e2, "source" : 2 }
lam = CoefficientFunction(
[lamvalues[mat] for mat in mesh.GetMaterials()])
Draw (log(lam), mesh, "log lambda");
Wir nützen die Wärmeleitfähigkeit für die Definition der Bilinearform:
a = BilinearForm(V)
a += lam*grad(u)*grad(v)*dx
f = LinearForm(V)
f += 1*v*dx("source")
a.Assemble()
f.Assemble()
<ngsolve.comp.LinearForm at 0x7fd8d1bba630>
und lösen das System:
gfu = GridFunction(V)
gfu.vec.data = a.mat.Inverse(V.FreeDofs()) * f.vec
Für die Wärmeverteilung erhalten wir:
Draw (gfu, mesh, "temperature");
Für den Gradient der Wärmeverteilung \(\nabla u\)
Draw (grad(gfu), mesh, "gradient",vectors=grad(gfu));
und für den Wärmefluss \(-\lambda \nabla u\):
Draw (-lam*grad(gfu), mesh, "heatflux");
Maxwell Gleichungen¶
from netgen.csg import *
from ngsolve import *
from ngsolve.webgui import Draw
Die Quelle des Beispiels ist in der NGSolve Dokumentation [S+21].
Geometrie¶
Mit Hilfe der netgen Bibliothek können auch einfach 3D Geometrien beschrieben werden. Für komplexere kann auf die OCC Bibliothek zurückgegriffen werden.
def MakeGeometry():
geometry = CSGeometry()
box = OrthoBrick(Pnt(-1,-1,-1),Pnt(2,1,2)).bc("outer")
core = OrthoBrick(Pnt(0,-0.05,0),Pnt(0.8,0.05,1))- \
OrthoBrick(Pnt(0.1,-1,0.1),Pnt(0.7,1,0.9))- \
OrthoBrick(Pnt(0.5,-1,0.4),Pnt(1,1,0.6)).maxh(0.2).mat("core")
coil = (Cylinder(Pnt(0.05,0,0), Pnt(0.05,0,1), 0.3) - \
Cylinder(Pnt(0.05,0,0), Pnt(0.05,0,1), 0.15)) * \
OrthoBrick (Pnt(-1,-1,0.3),Pnt(1,1,0.7)).maxh(0.2).mat("coil")
geometry.Add ((box-core-coil).mat("air"), transparent=True)
geometry.Add (core, col=(0.5,0.5,0))
geometry.Add (coil, col=(0,1,0))
return geometry
geo = MakeGeometry()
# Draw (geo)
mesh = Mesh(geo.GenerateMesh(maxh=0.5))
mesh.Curve(5)
Draw (mesh, clipping = { "pnt" : (0,0,0), "vec" : (0,1,0) });
Magnetostatisches Problem¶
Mit Hilfe Maxwell Gleichungen folgt das partielle Differentialgleichungssystem für statische Magnetfelder, gegeben durch
Mit Hilfe des Vektorpotential Ansatz \(B = \mathop{curl} A\), motiviert durch die Forderung \(\mathop{div} B = 0\) folgt die PDE
wobei \(A\) das gesuchte Vektorpotential und \(j\) eine externe Stromdichte sei.
Wir können wiederum eine schwache Gleichung berechnen, wobei der geeignete Funktionenraum in dem Fall durch den \(H(\mathop{curl})\) gegeben ist. Die schwache Gleichung lautet
V = HCurl(mesh,order=3)
u,v = V.TnT()
gfu = GridFunction(V)
Das Rechengebiet \(\Omega\) setzt sich hier aus den Teilgebiete
Luft (air)
Kern (core)
Spule (coil) zusammen.
mesh.GetMaterials()
('air', 'core', 'coil')
Auf den jeweiligen Teilgebiete haben wir unterschiedliche Materialien, welche sich in der relativen Permeabilität unterscheiden. Wir definieren die relative Permeabilität wie folgt:
mur = { "core" : 1000, "coil" : 1, "air" : 1 }
mu0 = 1.257e-6
nu_coef = [ 1/(mu0*mur[mat]) for mat in mesh.GetMaterials() ]
nu = CoefficientFunction(nu_coef)
Um die eingeprägte Stromdichte in der Spule beschreiben zu können, ist der Richtungsvektor \(w\) der Stromdichte erforderlich. Wir haben im Beispiel eine zylindrische Spule. Entsprechend definieren wir den Richtungsvektor \(w\)
w = CoefficientFunction((y,0.05-x,0))/sqrt(x*x+y*y)
Damit können wir nun die Bilinearform und Linearform des Systems (7) definieren und berechnen:
a = BilinearForm(V)
a += nu*curl(u)*curl(v)*dx + 1e-6*nu*u*v*dx
f = LinearForm(V)
f += w * v * dx("coil")
Da das Problem abhängig von Mesh Grösse und Polynomordnung der FEM Basisfunktionen schon recht gross werden kann, benutzen wir einen iterativen Solver:
c = Preconditioner(a, type="multigrid")
Nun berechnen wir die Systemmatrix, den rechten Vektor und die Lösung des Systems parallel mit shared Memory:
with TaskManager():
a.Assemble()
f.Assemble()
solver = CGSolver(mat=a.mat, pre=c.mat)
gfu.vec.data = solver * f.vec
Draw (curl(gfu), mesh, "B-field", draw_surf=False, \
clipping = { "pnt" : (0,0,0), "vec" : (0,1,0), "function" : False },
vectors = { "grid_size" : 100 });
Test¶
from netgen.geom2d import unit_square
from ngsolve import *
from ngsolve.webgui import Draw
mesh = Mesh(unit_square.GenerateMesh(maxh=1/3))
Draw(mesh);
Python¶
Für numerische Berechungen benutzen wir im Kurs Python. Eine gute Einführung in Python ist im interaktiven Jupyter-Book Python Programming And Numerical Methods: A Guide For Engineers And Scientists zu finden.
Im wesentlichen werden wir fundamentale Funktionalität von Python benutzen. Für numerische Berechnungen werden wir auf NumPy und SciPy zurückgreifen. Die Visualisierung kann sehr matlab nahe mit Hilfe von Matplotlib umgesetzt werden.
Falls Sie Python mit den entsprechenden Module noch nie benutzt haben, ist es sehr sinnvoll sich vorab mit dem wesentlichen auseinander zu setzen.
NGSolve¶
Im Rahmen der numerischen Methoden für partielle Differentialgleichungen werden wir die Methode der finiten Elemente kennen lernen. Wir werden für die Umsetzung auf eine C++ Bibliothek NGSolve zurückgreifen, welche eine umfangreiche Python-Schnittstelle zur Verfügung stellt.
Netgen/NGSolve ist eine hochleistungsfähige Multiphysik-Finite-Elemente-Software. Sie wird häufig zur Analyse von Modellen aus den Bereichen Festkörpermechanik, Strömungsmechanik und Elektromagnetik eingesetzt. Dank der flexiblen Python-Schnittstelle können neue physikalische Gleichungen und Lösungsalgorithmen leicht implementiert werden.
Das Ziel des Moduls besteht in der Vermittlung der mathematischen Grundlagen und insbesondere auch numerischen Anwendung derer auf konkrete Beispiele aus der Ingenieur Praxis.
Bemerkung
Installieren Sie NGSolve auf ihrem Rechner. Die dazu notwendigen Anleitungen finden Sie auf (https://ngsolve.org) unter dem Abschnitt INSTALLATION:
Jupyter Hub¶
Auf dem Rechner CLT-DSK-T-7307.zhaw.ch ist ein JupyterHub eingerichtet. Der Rechner ist nur im Intranet verfügbar (VPN Verbindung notwendig).
Ein Account kann selbständig kreiert werden, wobei dieser authentifiziert wird. Bitte benutzen Sie als User-Name Ihr ZHAW Kürzel und ein sicheres Passwort.
Abb. 1 Authetication workflow¶
Grundlegende Räume¶
Vektorräume¶
In den Modulen linearen Algebra, Analysis und Numerik wurden Vektorräume und Normen mit dem \(\mathbb{R}^n\) eingeführt und benutzt. Wir definieren hier der Vollständigkeit halber die Begriffe nochmals und erweitern die Anwendung auf allgemeinere Räume, insbesondere müssen diese nicht endlich dimensional sein.
Beginnen wir mit dem Begriff der Vektorräume. Um diesen definieren zu können, benötigen wir einen Zahlenkörper. In aller Regel benutzen wir die reellen Zahlen \(\mathbb{R}\). Wir legen mit dem folgenden Axiom fest, was die reellen Zahlen sind:
Definition: reelle Zahlen
Es existiere eine Menge \(\mathbb{R}\) mit folgenden Eigenschaften:
Es existieren Operationen
\[\begin{split}\begin{split} + : \mathbb{R} \times \mathbb{R} \ & \to \ \mathbb{R}\quad\text{Addition}\\ \cdot : \mathbb{R} \times \mathbb{R} \ & \to \ \mathbb{R}\quad\text{Multiplikation}\end{split}\end{split}\]mit den Eigenschaften:
Assoziativgesetze
\[\begin{split}\begin{split} (a+b) + c & = a + (b+c)\quad \forall\ a,b,c \in \mathbb{R}\\ (a\cdot b) \cdot c & = a \cdot (b\cdot c)\quad \forall\ a,b,c \in \mathbb{R} \end{split}\end{split}\]Kommutativgesetze
\[\begin{split}\begin{split} a + b & = b + a \quad \forall\ a,b \in \mathbb{R}\\ a\cdot b & = b \cdot a\quad \forall\ a,b \in \mathbb{R} \end{split}\end{split}\]Neutrale Elemente
\[\begin{split}\begin{split} \exists 0: a + 0 = a\quad \forall a \in \mathbb{R}\\ \exists 1: a \cdot 1 = a\quad \forall a \in \mathbb{R} \end{split}\end{split}\]Inverse Elemente
\[\begin{split}\begin{split} \forall a\in \mathbb{R}\ \exists a'\in\mathbb{R} : a + a' = 0\\ \forall a\in \mathbb{R}\setminus \{ 0\}\ \exists \tilde{a}\in\mathbb{R} : a \cdot \tilde{a} = 1 \end{split}\end{split}\]Schreibweise: \(-a := a', a - a := a + (-a), \frac{1}{a} := \tilde{a}, \frac{a}{a} := a\cdot \frac{1}{a}\)
Distributivgesetz
\[a\cdot (b+c) = a\cdot b + a\cdot c\]
\(\mathbb{R}\) ist geordnet, d.h. es existiert eine Relation \(\le\) so, dass gilt
\(\mathbb{R}\) ist totalgeordnet, d.h.
\(\mathbb{R}\) ist teilgeordnet, d.h.
Für alle \(x\in\mathbb{R}\) gilt: \(x \le x\).
Ist \(x \le y\) und \(y\le z\) für \(x,y,z\in\mathbb{R}\), so ist \(x \le z\).
Ist \(x \le y\) und \(y \le x\) für \(x,y \in \mathbb{R}\), so ist \(x = y\).
(Mit \(x<y\) bezeichnen wir den Fall \(x \le y\) und \(x \not= y\).)
Für je zwei Elemente \(x,y \in\mathbb{R}\) gilt
\[x \le y\quad \text{oder}\quad y\le x.\]
Die Ordnung ist verträglich mit Addition und Multiplikation, d.h. für \(a,b,c\in\mathbb{R}\) gilt
\[\begin{split}\begin{array}{c} a \le b \Rightarrow a+c \le b+c\\ a \le b, 0 \le c \Rightarrow a\cdot c \le b\cdot c \end{array}\end{split}\]\(\mathbb{R}\) ist vollständig. Das heisst, dass jede nicht leere nach oben beschränkte Menge reeller Zahlen eine kleinste obere Schranke besitzt.
Im Allgemeinen ist ein (Zahlen)-Körper über eine Gruppe wie folgt definiert:
Definition: Gruppe
Ein Tupel \((G, \cdot)\) bestehend aus einer Menge \(G\) und einer Verknüpfung \(\cdot : G \to G\) heisst Gruppe, falls die Verknüpfung assoziativ ist, ein neutrales Element \(e\in G\) existiert und für alle \(a \in G\) ein \(b\in G\) exisitert so dass \(a\cdot b = b\cdot a = e\) gilt. Ist die Verknüpfung kommutativ, nennt man die Gruppe kommutativ.
Ein Körper lässt sich somit wie folgt allgemein definieren:
Definition: Körper
Ein Körper ist eine Tripel \((K, +, \cdot)\) mit folgenden Eigenschaften:
\((K, +)\) ist eine kommutative Gruppe mit neutralem Element \(0_K\).
\((K, \cdot)\) ist eine kommutative Gruppe mit neutralem Element \(1_K\).
(Distributivgesetz) Für alle \(a,b,c\in K\) gilt
Beispiele für Körper sind folgende Tupel
\((\mathbb{R}, +, \cdot)\) und \((\mathbb{Q}, +, \cdot)\) mit der üblichen Addition und Multiplikation,
\((\mathbb{Z}, +, \cdot)\) bildet keine Gruppe.
Mit Hilfe eines Körpers können wir nun einen \(\mathbb{K}\)-Vektorraum wie folgt definieren:
Definition: \(\mathbb{K}-Vektorraum\)
Ein \(\mathbb{K}\)-Vektorraum ist ein Tripel \((V, +, \cdot)\) mit den Eigenschaften
\((V,+)\) ist eine kommutative Gruppe
Die Abbildung \(\cdot : \mathbb{K} \times V \to V\) genügt den Eigenschaften
\(\alpha\cdot (\beta\cdot x) = (\alpha\cdot \beta)\cdot x\)
\(\alpha\cdot (x+y) = (\alpha\cdot x) + (\alpha\cdot y)\)
\((\alpha+\beta)\cdot x = (\alpha\cdot x) + (\beta\cdot x)\)
\(1_K \cdot x = x\)
wobei \(\alpha, \beta\in\mathbb{K},\ x, y\in V\).
Bemerkung
Wenn man in einem allgemeinen Kontext von Vektoren spricht, so meint man damit die Elemente eines Vektorraumes. Spricht man von Skalaren, so sind die Elemente des zugrundeliegenden Körpers gemeint.
Beispiele:
Vektorraum \(\mathbb{R}^n\)
Anwendung in python:
import numpy as np
x = np.array([1,2,3,4])
y = np.array([-4,-3,-2,-1])
print('x+y=',x+y)
print('5*(x+y)=',5*(x+y),'= 5*x+5*y = ',5*x+5*y)
x+y= [-3 -1 1 3]
5*(x+y)= [-15 -5 5 15] = 5*x+5*y = [-15 -5 5 15]
Vektorraum der stetigen Funktionen.
Sei \(\alpha \in \mathbb{R}\) und \(u,v : [a,b]\subset \mathbb{R} \to \mathbb{R}\) zwei stetige Funktionen. Zeige, dass die Summe zweier stetiger Funktionen \((u+v)\) wieder stetig ist und dass das Vielfache einer stetigen Funktion \((\alpha u)\) ebenso stetig ist.
Aufgabe
Beweise die Aussage.
Metrische Räume¶
Metrik¶
In der Analysis will man oft eine Distanz zwischen zwei Elemente eines Vektorraumes angeben. Insbesondere bei Konvergenzbetrachtungen ist der Abstand zweier Elemente existentiell wichtig. Der Konvergenzbegriff in \(\mathbb{R}\) unter Hinzunahme der folgenden Distanzfunktion
lautet wie folgt: Die Folge \(\{x_n\}\) aus \(\mathbb{R}\) heisst konvergent gegen \(x_0\in\mathbb{R}\), wenn es zu jedem \(\varepsilon > 0\) eine natürliche Zahl \(n_0 = n_0(\varepsilon)\) gibt, so dass
für alle \(n \ge n_0\) gilt.
Definition: Metrik
Eine nichtleere Menge \(X\) mit Elemente \(x, y, z, \ldots\) heisst ein metrischer Raum, wenn jedem Paar \(x, y \in X\) eine reelle Zahl \(d(x,y)\), genannt Abstand oder Metrik, zugeordnet ist, mit den Eigenschaften: Für alle \(x,y,z\in X\) gilt
\(d(x,y) \ge 0,\ d(x,y) = 0\) genau dann, wenn \(x=y\) ist
\(d(x,y) = d(y,x)\) Symmetrieeigenschaft
\(d(x,y) \le d(x,z) + d(z,y)\) Dreiecksungleichung.
Für metrische Räume verwenden wir wieder die Schreibweisen: \((X, d)\) oder kurz \(X\), falls der Kontext klar ist.
Aufgabe
Zeige, dass für \(X = C[0,1]\), den stetigen Funktionen auf dem Intervall \([0,1]\) die Abbildung
eine Metrik definiert (Maximumsmetrik).
Beispiel:
import numpy as np
import matplotlib.pyplot as plt
x = lambda t: t**2
y = lambda t: t*(1-t)+2/(1+((t-0.5)/0.02)**2)
t = np.linspace(0,1,400)
plt.plot(t,x(t), label='$x(t)$')
plt.plot(t,y(t), label='$y(t)$')
plt.legend()
plt.show()
Die Maximummetrik berechnet die maximale Differenz der beiden Funktionen:
plt.plot(t,np.abs(x(t)-y(t)), label='$|x(t)-y(t)|$')
plt.legend()
plt.show()
Aufgabe
Berechne analytisch den exakten Wert der Maximumsmetrik für die beiden Funktionen \(x,y\) aus obigem Beispiel.
Eine weitere wichtige Metrik ist die Integralmetrik. Es sei \(X\) die Menge aller reellwertigen Funktionen, die auf einem (nicht notwendig beschränkten) Intervall \((a,b)\) stetig sind und für die das Integral
im Riemannschen Sinne existiert. Setzen wir für \(x(t), y(t)\in X\)
Definition: Integralmetrik
so wird \(X\) mit dieser Integralmetrik zu einem metrischen Raum. Der Beweis nutzt die Minkowski-Ungleichung für Integrale
Beispiel:
plt.plot(t,x(t), label='$x(t)$')
plt.plot(t,y(t), label='$y(t)$')
plt.fill_between(t,x(t),y(t),alpha=0.3, label='$x(t)-y(t)$')
plt.legend()
plt.show()
Aufgabe
Berechne die Integralmetrik für \(p=2\) und \(p=1/2\) für das Beispiel oben.
Aufgabe
In der Codierungstheorie ist ein \(n\)-stelliges Binärwort ein \(n\)-Tuppel \((\xi_1, \ldots, \xi_n)\), wobei \(\xi_k \in \{0,1\}\) für \(k=1,\ldots, n\). Bezeichne \(X\) die Menge aller dieser Binärwörter. Für \(x = \xi_1 \xi_2 \ldots \xi_n\), \(y = \eta_1 \eta_2 \ldots \eta_n\) ist die Hamming-Distanz zwischen \(x\) und \(y\) durch
definiert. Zeige:
\(d_H(x,y)\) lässt sich durch
\[d_H(x,y) := \sum_{k=1}^n [(\xi_k+\eta_k) \mod 2]\]darstellen.
\((X,d_H)\) ist ein metrischer Raum.
Die topologischen Begriffe wie offene Kugel, innerer Punkt, Häufungspunkt, abgeschlossen, beschränkt lassen sich mit Hilfe der Metrix \(d\) für einen metrischen Raum \((X,d)\) direkt aus dem aus der Analysis bekannten \(\mathbb{R}^n\) übertragen.
Definition: Konvergenz
Eine Folge \(\{x_n\}\subset X\) von Elemente aus \(X\) heisst konvergent, wenn es ein \(x_0\in X\) gibt mit
dh. wenn es zu jedem \(\varepsilon > 0\) ein \(n_0 = n(\varepsilon)\in\mathbb{N}\) gibt, mit
Schreibweise: \(x_n \to x_0\) für \(n \to \infty\) oder \(\lim_{n\to\infty} x_n = x_0\), \(x_0\) heisst Grenzwert der Folge \(\{x_n\}\)
Der Grenzwert einer konvergenten Folge ist eindeutig bestimmt. Dies lässt sich per Widerspruch wie folgt leicht zeigen. Seien \(x_0\) und \(y_0\) zwei verschiedene Grenzwerte. Daher gilt
Es folgt damit \(d(x_0,y_0)=0\) und damit \(x_0 = y_0\).
Funktionenfolgen¶
Wir starten mit einem intuitiven Begriff der Konvergenz für Funktionenfolgen:
Definition: Punktweise Konvergenz
Man nennt eine Funktionenfolge \(\{x_n(t)\} \subset C[a,b]\) punktweise konvergent, wenn für jedes \(t\in [a,b]\) die Zahlenfolge \(x_1(t), x_2(t), \ldots \) konvergiert. Die Grenzfunktion \(x\) ist dabei durch
gegeben.
Die punktweise Konvergenz erweist sich für die Analysis als zu schwach. Als Beispiel dazu betrachten wir die Folge der Funktionen \(x_n \subset C(\mathbb{R})\)
Wie im Python Code unten leicht zu sehen ist, konvergiert die Folge punktweise gegen
Obwohl alle Funktionen \(x_n\) stetig sind, ist die Grenzfunktion \(x\) unstetig und damit nicht in unserem Funktionenraum (oder Vektorraum) \(x\not\in C(\mathbb{R})\)! Das ist für uns unbrauchbar.
def x(t):
y = np.zeros_like(t)
y[np.abs(t)<1] = 1
y[np.abs(t)==1] = 0.5
return y
xn = lambda t,n : 1/(1+t**(2*n))
t = np.linspace(-3,3,400)
plt.plot(t,xn(t,1), label='$xn=1$')
plt.plot(t,xn(t,4), label='$xn=4$')
plt.plot(t,xn(t,8), label='$xn=8$')
plt.plot(t,x(t),'--', label='Grenzfunktion')
plt.legend()
plt.show()
Das Problem der punktweisen Konvergenz besteht darin, dass für jedes \(t\in\mathbb{R}\) eine eigene Schranke \(\varepsilon = \varepsilon(t)\) gewählt werden kann. Dies ist zu schwach, um garantieren zu können, dass eine konvergente Funktionenfolge wieder stetig ist. Wir benutzen nun die Maximumsmetrik (8). Daraus folgt, dass zu jedem \(\varepsilon > 0\) es ein \(n_0 = n_0(\varepsilon) \in \mathbb{N}\) mit
geben muss. Zu jedem \(\varepsilon > 0\) ist hier im Sinne von „beliebig klein“ zu verstehen. Der grosse Unterschied zur punktweisen Konvergenz ist, dass hier das \(\varepsilon\) für alle \(t\in\mathbb{R}\) das selbe ist. In diesem Sinne ist jedoch die Funktionenfolge \(x_n\) nicht mehr konvergent:
epsilon = 0.1
plt.plot(t,xn(t,1), label='$xn=1$')
plt.plot(t,xn(t,4), label='$xn=4$')
plt.plot(t,xn(t,8), label='$xn=8$')
plt.plot(t,x(t),'--', label='Grenzfunktion')
plt.fill_between(t,x(t)-epsilon,x(t)+epsilon,label=r'$\varepsilon$-Schranke',alpha=0.3)
plt.legend()
plt.show()
Für ein \(\varepsilon < 1\) (Sprunghöhe) finden wir kein \(n_0\) so, dass der Abstand zur Grenzfunktion der Bedingung genügt. Die Funktionenfolge ist daher nicht konvergent bezüglich der Maximumsmetrik.
Definition: Gleichmässige Konvergenz
Die Konvergenz in \((C[a,b],d_{\max})\) nennt man gleichmässige Konvergenz auf dem Intervall \([a,b]\).
Bemerkung
Ist eine stetige Funktionenfolge gleichmässig konvergent, so ist die Grenzfunktion wiederum stetig.
Cauchy-Folge¶
Der Begriff der Cauchy-Folge folge kann direkt auf metrische Räume übertragen werden:
Definition: Cauchy-Folge
Eine Folge \(\|x_n\}\) aus dem metrischen Raum \(X\) heisst Cauchy-Folge, wenn
ist, dh. wenn es zu jedem \(\varepsilon > 0\) eine natürliche Zahl \(n_0 = n_0(\varepsilon)\in\mathbb{N}\) git mit
Satz
Jede konvergente Folge im metrischen Raum \(X\) ist auch eine Cauchy-Folge.
Beweis: Aus der Konvergenz der Folge \(\{x_n\}\) folgt: Zu jedem \(\varepsilon>0\) gibt es ein \(n_0 = n_0(\varepsilon)\in\mathbb{N}\) und ein \(x_0\in X\) mit
für alle \(n,m \ge n_0\). Mit Hilfe der Dreiecksungleichung folgt
für alle \(n,m \ge n_0\). \(\Box\)
Die Umkehrung gilt im allgemeinen nicht.
Beispiel: Betrachte \(X = (0,1)\) mit der Metrik \(d(x,y) := |x-y|\) und der Folge \(\{x_n\}\) mit \(x_n = \frac{1}{1+n}\). Die Folge ist eine Cauchy-Folge im metrischen Raum \((X,d)\), besitzt jedoch keinen Grenzwert in diesem \((0\not\in X)\).
Das führt uns zu einem neuen Begriff, der Vollständigkeit. Wir interessieren uns insbesondere für diejenigen metrischen Räume, in denen Cauchy-Folgen konvergieren.
Definition: Vollständig
Ein metrischer Raum \(X\) heisst vollständig, wenn jede Cauchy-Folge in \(X\) gegen ein Element von \(X\) konvergiert.
Betrachten wir ein paar Beispiele:
\(\mathbb{R}^n\) mit der euklidischen Metrik
\[d(x,y) = \sqrt{\sum_{k=1}^n |x_k-y_k|^2}\]versehen, ist ein vollständiger metrischer Raum. Dies folgt aus dem Cauchyschen Konvergenzkriterium für Punktfolgen.
\(C[a,b]\) mit der Maximumsmetrik
\[d(x,y) = \max{a\le t\le b} |x(t)-y(t)|\]versehen ist vollständig.
Dagegen ist \(C[a,b]\) bezüglich der Integralmetrik
nicht vollständig. Wir betrachten dazu für \(p=2\) auf \(C[0,1]\) folgendes Gegenbeispiel:
Sei \(t\in[0,1]\)
und \(x(t) = \frac{1}{t^\alpha}\) für \(0<\alpha<1/2\).
def xn(t,n,alpha):
y = np.zeros_like(t)
y[t<=1/n] = n**alpha
y[t>1/n] = 1/(t[t>1/n]**alpha)
return y
x = lambda t, alpha: 1/t**alpha
t = np.linspace(0,1,400)
plt.plot(t,xn(t,3,1/3), label='$n=3$')
plt.plot(t,xn(t,10,1/3), label='$n=10$')
plt.plot(t,xn(t,20,1/3), label='$n=20$')
plt.plot(t[1:],x(t[1:],1/3),'--', label='Grenzfunktion')
plt.title(r'$\alpha = 1/3$')
plt.legend()
plt.ylim(0,4)
plt.show()
Es gilt \(x_n \in C[0,1]\) für alle \(n\in\mathbb{N}\) und
Mit Hilfe der Ungleichung \((a-b)^2 \le 2 (a^2+b^2)\) folgt
da \(1-2\alpha > 0\) gilt. Mit dem konviergiert die Folge \(\{x_n\}\) gegen \(x\) in der Integralmetrik (\(p=2\)). Wir zeigen, dass \(\{x_n(t)\}\) keine auf \([0,1]\) stetige Grenzfunktion besitzt. Dazu nehmen wir an, dass \(y(t)\in C[0,1]\) sei Grenzfunktion der Folge \(\{x_n(t)\}\). Wir setzen
(Muss für eine wohl definierte Obersumme endlich sein!) Für \(t \le (2M)^{-1/\alpha}\) und \(n > (2M)^{1/\alpha}\) gilt
und somit
im Widerspruch zur Annahme, dass \(\{x_n(t)\}\) gegen \(y(t)\) konvergiert. Damit ist die Behauptung bewiesen. \(\Box\)
Die Tatsache, daß \(C[a,b]\), versehen mit einer Integralmetrik, kein vollständiger metrischer Raum ist, bedeutet einen schwerwiegenden Mangel dieses Raumes. Jedoch gibt es mehrere Wege der Vervollständigung:
Man erweitert die Klasse \(C[a,b]\) zur Klasse der auf \([a,b]\) Lebesgue-integrierbaren Funktionen und interpretiert das in (9) auftretende Integral im Lebesgueschen Sinn. Dadurch gelangt man zum vollständigen metrischen Raum \(L_p[a, b]\) (vgl. [Heu08], S. 109).
Ein anderer Weg besteht darin, dass der vollständige Erweiterungsraum als Menge von linearen Funktionalen auf einem geeigneten Grundraum nach dem Vorbild der Distributionentheorie aufgefasst wird.
Ein weiterer Weg besteht in der abstrakten Konstruktion eines vollständigen Erweiterungsraums mit Hilfe von Cauchy-Folgen. Auf diese Weise lässt sich jeder nichtvollständige metrische Raum vervollständigen (vgl. [Heu06], S. 251)
Wir definieren kompakt für metrische Räume wie folgt
Definition: Kompakt
Sein \(X\) ein metrischer Raum. \(A \subset X\) heisst kompakt, wenn jede Folge \(\{x_n\}\) aus \(A\) eine Teilfolge enthält, die gegen ein Grenzelement \(x\in A\) konvergiert.
Satz
Jede kompakte Teilmenge \(A\) eines metrischen Raumes \(X\) ist beschränkt und abgeschlossen.
Die Umkehrung gilt im allgemeinen nicht.
Bestapproximation in metrischen Räumen¶
In der Approximationstheorie stellt sich das Grundproblem: In einem metrischen Raum \(X\) sei eine Teilmenge \(A\) und ein fester Punkt \(y\in X\) vorgegeben. Zu bestimmen ist ein Punkt \(x_0 \in A\), der von \(y\) minimalen Abstand hat. Das Problem beginnt schon damit, dass es nicht klar, ist, dass es einen solchen Punkt überhaupt gibt:
Betrachte den Raum \((\mathbb{R}, d)\) mit \(d(x_1,x_2) = |x_1-x_2|\). Die Teilmenge \(A\) sei gegeben durch \(A = (0,1)\) und \(y=2\). In \(A\) gibt es keinen Punkt \(x_0\), für den \(d(x_0,2)\) minimal ist (\(1\not\in A\)).
Zur Erinnerung:
Definition: Supremum, Infimum
Sei \(A\subset \mathbb{R}\), dann bezeichnet man mit dem Supremum von \(A\) die kleinste reelle Zahl \(\lambda\) mit \(x\le \lambda\) für alle \(x\in A\). Analog bezeichnet man mit dem Infimum die grösste reelle Zahl \(\mu\) mit \(x\ge \mu\) für alle \(x\in A\).
Satz
Es sei \(X\) ein metrischer Raum und \(A\) eine kompakte Teilmenge von \(X\). Dann gibt es zu jedem festen Punkt \(y \in X\) einen Punkt \(x_0 \in A\), der von \(y\) kleinsten Abstand hat.
Betrachten wir das obige Beispiel angepasst auf die Voraussetzung im Satz: Sei \(A = [0,1] \subset \mathbb{R}\) ein kompaktes Intervall, dann ist der Punkt \(x_0 = 1\) bestapproximierendes Element.
Abb. 2 Bestapproximation¶
Normierte Räume. Banachräume¶
Bis jetzt haben wir sehr wenig Eigenschaften eines Raumes benötigt. Was uns noch fehlt, sind abgesehen vom Abstand der Elemente noch algebraische Eigenschaften (addieren, multiplizieren, etc.). Dazu definieren wir den linearen Raum (oder Vektorraum) wie folgt.
Definition: linearer Raum
Ein linearer Raum (oder Vektorraum) über einem Körper \(\mathbb{K}\) besteht aus einer nichtleeren Menge \(X\), sowie
einer Vorschrift, die jedem Paar \((x,y)\) mit \(x,y \in X\) genau ein Element \(x+y\in X\) zuordnet (Addition)
einer Vorschrift, die jedem Paar \((\lambda,x)\) mit \(\lambda\in \mathbb{K}\) und \(x \in X\) genau ein element \(\lambda x\in X\) zuordnet (Multiplikation mit Skalaren), wobei für alle \(x,y,z \in X\) und \(\lambda, \mu\in\mathbb{K}\) folgende Regeln gelten:
Beispiele für lineare Räume:
Die Mengen \(\mathbb{R}^n\), \mathbb{C}^n$ sind wohl bekannt.
Menge \(C[a,b]\) aller reellwertigen stetigen Funktionen:
\[\begin{split}\begin{split} (x+y)(t) & = x(t) + y(t)\\ (\lambda x)(t) & = \lambda x(t)\\ 0(t) & = 0\\ (-x)(t) & = -x(t) \end{split}\end{split}\]mit \(t \in [a,b]\subset \mathbb{R}\), \(\lambda\in\mathbb{R}\).
\(C^k[a,b]\) Menge aller reellwertigen \(k\)-mal stetig differenzierbare Funktionen.
\(C^{\infty}[a,b]\) Menge aller beliebig oft stetig differenzierbare Funktionen.
Menge aller Polynome
Menge \(l_p\) aller Zahlenfolgen \(x = \{x_k\}\), für die \(\sum_{k=1}^{\infty} |x_k|^p < \infty\) konvergiert:
\[\begin{split}\begin{split} x+y & = \{x_k\} + \{y_k\} = \{x_k + y_k\}\\ \lambda x & = \lambda \{x_k\} = \{\lambda x_k\},\quad \lambda\in\mathbb{R}\end{split}\end{split}\]
Wie in der linearen Algebra sind folgende Begriffe analog definiert
Definition: Unterraum, lineare Mannigfaltigkeit, lineare Hülle / Span, linear unabhängig, Dimension, Basis
Eine nicht leere Teilmenge \(S\) von \(X\) heisst Unterraum von \(X\), wenn für bel. \(x,y \in S\) und \(\lambda \in \mathbb{K}\) stets
\[x+y \in S\quad\text{und}\quad \lambda x \in S\]folgt. Insbesondere ist \(S\) selbst ein linearer Raum über \(\mathbb{K}\).
Ist \(S\) ein Unterraum von \(X\) und \(x_0\in X\) beliebig, so nennt man
\[M = x_0 + S := \{x_0+y\ |\ y\in S\}\]eine lineare Mannigfaltigkeit von \(X\).
Ist \(A\) eine beliebige nichtleere Teilmenge von \(X\), so bilden alle Linearkombinationen \(\sum_{k=1}^m \lambda_k x_k\) mit beliebigem \(m \in \mathbb{N}\), \(\lambda_k\in\mathbb{K}\), \(x_k \in A\) einen Unterraum \(S\subset X\). Er wird lineare Hülle von \(A\) oder \(\mathop{span} A := S\) genannt.
Man sagt: \(A\) spannt \(S\) auf oder \(A\) ist ein Erzeugendensystem von \(S\). Im Falle \(S=X\) spannt \(A\) den ganzen Raum \(X\) auf.
Sind \(S\) und \(T\) Unterräume von \(X\), dann ist die Summe \(S+T\) definiert durch
\[S+T := \mathop{span} S \cup T.\]Die (endlich vielen) Elemente \(x_1, \ldots, x_n\in X\) heissen linear unabhängig, wenn aus
\[\alpha_1 x_1 + \ldots + \alpha_n x_n = 0\quad\text{stets}\quad \alpha_1 = \ldots = \alpha_n = 0\]folgt.
Sei \(S\) ein Unterraum von \(X\). Wir sagen, \(S\) besitzt die Dimension \(n\), \(\mathop{dim} S = n\), wenn es \(n\) linear unabhängige Elemente von \(S\) gibt, aber \(n+1\) Elemente von \(S\) stets linear abhängig sind.
\(S\) heisst Basis von \(X\), wenn die Elemente von \(S\) linear unabhängigsind und \(\mathop{span} S = X\) gilt.
Besitzt \(X\) keine endlich dimensionale Basis, nennt man \(X\) unendlich-dimeansional (\(\mathop{dim} X = \infty\)).
Bemerkungen: Die oben erwähnten Funktionenräume \(C[a,b]\), \(C^k[a,b]\), Polynome sind unendlich-dimensional. Ebenso ist der Folgenraum \(l_p\) unendlich-dimensional:
Man betrachte
\[x^{(k)} = \{0, \ldots, 0, 1, 0, \ldots \}\in l_p\]mit 1 an der Stelle \(k\).
Im folgenden sind wir an Räumen interessiert, für welche eine lineare Struktur und eine Metrik gegeben ist.
Definition: normierter Raum
Sei \(X\) ein metrischer und linearer Raum. Zu dem sei die Metrik \(d\) von \(X\) translationsinvariant
und homogen
Dann nennt man \(X\) einen normierten Raum. Der durch
erklärte Ausdruck heisst Norm von \(x\).
Bemerkungen:
Neben der kurzen Schreibweise \(X\), verwendet man häufig auch die Bezeichnung \((X, \|\cdot\|)\). Der Punkt in \(\|\cdot\|\) ist als Platzhalter zu verstehen.
Führt man den normierten Raum \(X\) mit Hilfe einer Norm ein, so ist durch
\[d(x,y) = \|x-y\|\quad\text{für alle}\ x,y\in X\]eine Metrik in \(X\) gegeben.
Folgerung
Ein normierter Raum \((X, \|\cdot\|)\) ist ein linearer Raum, auf dem eine Norm \(\|\cdot\|\) erklärt ist, die für alle \(x,y\in X\) und \(\alpha \in \mathbb{K}\)
erfüllt.
Damit können wir einen wichtigen Begriff der Funktionalanalysis einführen, den Banachraum:
Definition: Banachraum
Vollständig normierte Räume \(X\) sind diejenigen, für die jede Cauchy-Folge in \(X\) gegen ein Element in \(X\) konvergiert.
Ein vollständiger normierter Raum heisst Banachraum.
Beispiele: Folgende Räume sind Banachräume
\(\mathbb{R}^n\) mit der Norm \(\|x\| = \sqrt{\sum_{k=1}^n |x_k|^2}\).
\(C[a,b]\) mit der Norm \(\|x\| := \max_{a\le t \le b} |x(t)|\).
\(C^k[a,b]\) mit der Norm \(\|x\| := \max_{a\le t \le b} |x(t)| + \max_{a\le t \le b} |x'(t)| + \ldots + \max_{a\le t \le b} |x^{(k)}(t)|.\)
\(l_p\ (1\le p < \infty)\) mit der Norm \(\|x\| = \left(\sum_{k=1}^{\infty} |x_k|^p \right)^{1/p}\)
Lineare Räume können durchaus verschieden normiert werden. Als Beispiel betrachte dazu den Raum \(X=\mathbb{R}^n\) mit den Normen
Aufgabe
Stelle den Einheitskreis \(K_{*} = \{x\in\mathbb{R}^n\, \big|\, \|x\|_{*} = 1\}\) bezüglich den drei verschiedenen Normen \(*\) graphisch dar.
import numpy as np
from numpy.linalg import norm
import matplotlib.pyplot as plt
x,y = np.meshgrid(np.linspace(-1.2,1.2,81),np.linspace(-1.2,1.2,81))
z1 = np.abs(x)+np.abs(y)
z2 = np.sqrt(x**2+y**2)
zinf = np.max([np.abs(x),np.abs(y)],axis=0)
fig, (ax1, ax2, ax3) = plt.subplots(1, 3)
ax1.contour(x,y,z1-1,0,colors='tab:blue')
ax2.contour(x,y,z2-1,0,colors='tab:orange')
ax3.contour(x,y,zinf-1,0,colors='tab:green')
for a,t in zip((ax1, ax2, ax3),('$K_1$','$K_2$','$K_\infty$')):
a.set_aspect(1)
a.grid()
a.set_title(t)
plt.tight_layout()
plt.show()
Die drei verschiedenen Normen führen zur Frage, wie die Normen zusammenhängen.
Defintion: äquivalente Normen
Zwei Normen \(\|\cdot\|_a\) und \(\|\cdot\|_b\) heissen äquivalent, wenn jede bezüglich der Norm \(\|\cdot\|_a\) konvergente Folge auch bezüglich der Norm \(\|\cdot\|_b\) konvergent ist und umgekehrt.
Im endlich dimensionalen gilt ein pauschaler Satz:
Satz
Alle Normen in einem endlich-dimensionalen Raum \(X\) sind äquivalent.
Dieses Resultat gilt für unendlich-dimensionale Räume nicht. Als Beispiel sei der lineare Raum \(C[a,b]\) mit der Maximumsnorm und der Quadratnorm erwähnt. Die beiden Normen sind nicht äquivalent, vgl. das Gegenbeispiel (10).
Mit diesem Satz folgt
Satz
Jeder endlich-dimensionale normierte Raum \(X\) ist vollständig, also ein Banachraum.
Skalarprodukträume. Hilberträume¶
Das aus der linearen Algebra bekannte Skalarprodukt lässt sich auch auf unendlich-dimensionale Räume übertragen. Wir definieren ganz allgemein
Definition: Skalarprodukt, Skalarproduktraum
Unter einem Skalarproduktraum versteht man einen linearen Raum \(X\) über \(\mathbb{K}\), in dem ein Skalarprodukt \((x,y)\) mit folgenden Eigenschaften definiert ist: Für beliebige \(x,y,z \in X\) und \(\alpha\in\mathbb{K}\) ist
und es gilt
Beispielsweise lässt sich auf \(X=C[a,b]\) Menge der reellwertigen stetigen Funktionen auf dem Intervall \([a,b]\) durch
ein Skalarprodukt definieren.
Satz
Es sei \(X\) ein Skalarproduktraum. Für beliebige \(x,y,z\in X\) und \(\alpha \in \mathbb{K}\) gilt
Beweis: selber durchführen.
Satz: induzierte Norm
In jedem Skalarproduktraum \(X\) lässt sich durch
eine Norm definieren. Man bezeichnet sie als die durch das Skalarprodukt \((x,y)\) induzierte Norm.
Der Beweis lässt sich einfach mit Hilfe der Schwarz’schen Ungleichung durchführen.
Satz: Schwarzsche Ungleichung
Es sei \(X\) ein Skalarproduktraum. Dann gilt für alle \(x,y\in X\)
Die Beweise sind dem Leser überlassen (vgl. [BWHM10] S. 43, 44).
Satz
Sei \(X\) ein Skalarproduktraum. Ferner seien \(\{x_n\}\) und \(\{y_n\}\) Folgen aus \(X\) mit \(x_n \to x\) und \(y_n \to y\) für \(n\to\infty\), wobei die Konvergenz im Sinne der induzierten Norm zu verstehen ist. Dann gilt
dh. das Skalarprodukt ist eine stetige Funktion bezüglich der Normkonvergenz.
Definition: Hilbertraum
Ein Skalarproduktraum \(X\), der bezüglich der durch das Skalarprodukt induzierten Norm
vollständig ist, heisst Hilbertraum.
Beispiele:
\(\mathbb{R}^n\) bzw. \(\mathbb{C}^n\) sind mit den Skalarprodukte
\[(x,y) = \sum_{k=1}^n x_k y_k\quad\text{bzw.}\quad (x,y) = \sum_{k=1}^n x_k \overline{y_k}\]Hilberträume.
\(l_2\) ist mit dem Skalarprodukt
\[(x,y) = \sum_{k=1}^\infty x_k \overline{y_k}\]ein Hilbertraum.
\(C[a,b]\) ist bezüglich der Quadratnorm
\[\|x\|_2 = \sqrt{(x,x)} = \left(\int_a^b |x(t)|^2 dt\right)^{1/2}\]kein Hilbertraum, da \((C[a,b], \|\cdot\|_2)\) nicht vollständig ist. Der Raum \(L_2[a,b]\) erweist sich als Vervollständigung dieses Raumes, welcher jedoch eine Verallgemeinerung des Riemannschen Integralbegriffs (dem Lebesgues Mass) erfordert.
Viele Eigenschaften des euklischen Raumes \(\mathbb{R}^n\), die mit dem Skalarprodukt zusammenhängen, können auf einen beliebigen Hilbertraum übertragen werden. Der Begriff der Ortohogonalität ist dabei sehr zentral.
Definition: orthogonal
Es sei \(X\) ein Hilbertraum.
Zwei Elemente \(x,y \in X\) heissen orthogonal (\(x\perp y\)), wenn
\[(x,y) = 0\]gilt.
Zwei Teilmengen \(A,B \subset X\) heissen orthogonal (\(A\perp B\)), wenn
\[(x,y) = 0 \quad \forall\ x\in A, y\in B\]gilt.
Sei \(M\subset X\), dann heisst
\[M^\perp := \{y\in X | (x,y)=0\quad\forall\,x\in M\}\]Orthogonalraum von \(M\).
Sei \(X'\) ein abgeschlossener Unterraum von \(X\). \(X''\) wird orthogonales Komplement von \(X'\) genannt, wenn
\[X''\perp X' \quad \text{und}\quad X' \oplus X'' = X\]gilt. Mit \(\oplus\) ist die direkte Summe bezeichnet.
Es gilt
Satz: Pythagoras
Es sei \(X\) ein Hilbertraum und seien \(x,y \in X\) mit \(x\perp y\). Dann gilt
Beweis: Einfaches Nachrechnen.
Satz
Es sei \(X\) ein Hilbertraum und \(M\) eine beliebige Teilmenge von \(X\). Dann ist der Orthogonalraum \(M^\perp\) von \(M\) ein abgeschlossener Unterraum von \(X\).
Für den Beweis sei auf [BWHM10] S. 50 verwiesen.
Wir kommen nun auf das Approximationsproblem aus Bestapproximation in metrischen Räumen zurück und können die Struktureigenschaften des Hilbertraumes nutzen:
Satz
Es sei \(X'\) ein abgeschlossener Unterraum von \(X\) und \(x\in X\) beliebig.
Dann existiert genau ein \(x_0 \in X'\) mit
\[\|x-x_0\| = \min_{x'\in X'} \|x-x'\|,\]dh. zu jedem \(x\in X\) gibt es genau ein bestapproximierendes Element bezüglich \(X'\).
Es gilt \(x_0\in X\) ist genau dann bestapproximierend an \(x\in X\), wenn
\[(x-x_0,y) = 0\quad \forall y\in X'\]gilt.
Für den Fall, dass \(X'\) endlich-dimensional ist, lässt sich das bestapproximierende Element konstruieren. Es gilt
Satz
Sei \(X'\subset X\) mit \(\dim X' < \infty\) ein Unterraum des Hilbertraumes \(X\) und sei \(x_1, \ldots, x_n\) eine Basis von \(X'\). Dann lässt sich das eindeutig bestimmte bestapproximierende Element \(x_0\in X'\) an \(x\in X\) in der Form
darstellen, wobei die Koeffizienten \(\lambda_1, \ldots, \lambda_n\) durch das lineare Gleichungssystem
gegeben sind.
Bemerkung: Bildet \(x_k\), \(k=1,\ldots, n\) ein Orthonormalsystem
so folgt aus (13) sofort
Die Koeffzienten \(\lambda_i\) nennt man auch Fourierkoeffizienten!
Wir werden zeigen, dass sich mit Hilfe des Schmidtschen Orthogonalisierungsverfahrens aus \(n\) linear unabhängigen Elementen stets ein Orthogonalsystem konstruieren lässt.
Definition: Orthonormalsystem (ONS)
Es sei \(X\) ein Hilbertraum. Man nennt die Folge \(\{x_k\}_{k\in\mathbb{N}}\) ein (abzählbares) Orthonormalsystem (kurz ONS) von \(X\), wenn
erfüllt ist.
Beispiele
Im \(l_2\) bilden die Folgen \(\{1,0,0,\ldots\}\), \(\{0,1,0,\ldots\},\ldots \) ein ONS.
Für den (nicht vollständigen) reellen Skalarproduktraum \(C[0,2\pi]\) bilden die trigonometrischen Funktionen
ein ONS.
Weitere Beispiele sind Hermitesche und Legendresche Polynome.
Es gilt ganz allgemein:
Satz: Orthogonalisierungsverfahren nach Erhard Schmidt
Gegeben sei eine abzählbare (nicht zwingend endliche) linear unabhängige Folge \(\{y_k\} \subset X\) aus dem Hilbertraum \(X\). Dann gibt es ein ONS aus \(n\) bzw. abzählbar unendlich viele Elementen \(\{x_k\}\) so, dass der von der Folge \(\{y_k\}\) aufgespannte (abgeschlossene) Unterraum mit dem der Folge \(\{x_k\}\) aufgespannten (abgeschlossene) Unterraum übereinstimmt.
Der Beweis beruht auf der Konstruktion: sei
so ist \(\mathop{span}\{y_1\} = \mathop{span}\{x_1\}\). Wir nehmen nun an, es seien bereits \(k\) orthonormierte Elemente \(x_1, \ldots, x_k\) mit \(\mathop{span}\{y_1, \ldots, y_k\} = \mathop{span}\{x_1,\ldots, x_k\}\) konstruiert. Dann setze
In dem Fall gilt \((z_{k+1},x_i) = 0\) für alle \(i = 1, \ldots, k\). Mit
folgt \(\mathop{span}\{y_1, \ldots, y_{k+1}\} = \mathop{span}\{x_1,\ldots, x_{k+1}\}\).
Bemerkung: Das Verfahren wird auch in der Numerik angewandt.
Die Elemente eines Hilbertraumes können mit Hilfe eines vollständigen Orthogonalsystems dargestellt werden. Dies gelingt mit Hilfe der verallgemeinerten Fourierreihen:
Satz: Fourierentwicklung
Sei \(X\) ein Hilbertraum mit einem vollständigen ONS \(\{x_k\}_{k\in\mathbb{N}}\).
Dann lässt sich jedes \(x\in X\) in der Summenform
\[x = \sum_{k=1}^\infty a_k\,x_k\quad\text{Fourierentwicklung von $x$}\]mit eindeutig bestimmten Koeffizienten
\[a_k = (x,x_k)\in\mathbb{K}\]darstellen und die Reihe \(\sum_{k=1}^\infty |a_k|^2\) ist konvergent.
Umgekehrt gibt es zu jeder Zahlenfolge \(\{a_k\}_{k\in\mathbb{N}}\) in \(\mathbb{K}\), für die \(\sum_{k=1}^\infty |a_k|^2\) konvergiert, genau ein \(x\in X\) mit \(x=\sum_{k=1}^\infty a_k x_k\).
Bemerkung: Aufgrund der Darstellung \(x = \sum_{k=1}^\infty a_k\,x_k\) nennt man ein vollständiges ONS auch eine Hilbertraumbasis.
Satz: Struktur von Hilberträumen
Es sei \(X\) ein Hilbertraum und \(\{x_k\}_{k\in\mathbb{N}}\) ein (abzählbares) ONS in \(X\). Dann sind die folgenden Aussagen äquivalent:
\(X = \overline{\underset{k\in\mathbb{N}}{\bigoplus} \mathop{span}(x_k)}\).
Das ONS \(\{x_k\}_{k\in\mathbb{N}}\) ist abgeschlossen.
Für alle \(x\in X\) gilt die Parsevalsche Gleichung
\[\sum_{k=1}^\infty |(x,x_k)|^2 = \|x\|^2\quad\text{(Vollständigkeitsrelation)}\]Jedes Element \(x\in X\) besitzt die Fourierentwicklung
\[x = \sum_{k=1}^\infty (x,x_k)\,x_k.\]
Siehe auch
Beispiel Orthogonalisierungsverfahren¶
nach Erhard Schmidt
import numpy as np
from sympy import symbols, integrate, lambdify
import matplotlib.pyplot as plt
Der Raum der quadratisch integrierbaren (nach Lebesgues) Funktionen \(L_2[-1,1]\) ist mit dem Skalarprodukt
und der induzierten Norm
ein Hilbertraum. Wir definieren daher das Skalarprodukt (dot-product) und die norm wie folgt:
t = symbols('t')
def dot(x,y):
return integrate(x*y,(t,-1,1))
def norm(x):
return dot(x,x)**(1/2)
Wir betrachten die Folge \(\{t^n\}_{n\in\mathbb{N}}\subset L^2[-1,1]\) von Monomen:
yi = [t**i for i in range(5)]
print(yi)
[1, t, t**2, t**3, t**4]
Die Monome sind nicht orthogonal, jedoch linear unabhängig. Falls dem so wäre müsste die Einheitsmatrix entstehen:
m = [[dot(yi[i],yi[j]) for j in range(5)] for i in range(5)]
m
[[2, 0, 2/3, 0, 2/5],
[0, 2/3, 0, 2/5, 0],
[2/3, 0, 2/5, 0, 2/7],
[0, 2/5, 0, 2/7, 0],
[2/5, 0, 2/7, 0, 2/9]]
Wir berechnen nun ein orthonormales System, basierend auf den Monomen nach dem Verfahren von Schmidt:
xi = [yi[0]/norm(yi[0])]
for i in range(1,5):
s = 0
for j in range(i):
s += dot(yi[i],xi[j])*xi[j]
zi=yi[i]-s
xi.append(zi/norm(zi))
Das Orthonormalsystem ist damit gegeben durch:
xi
[0.707106781186547,
1.22474487139159*t,
2.37170824512628*t**2 - 0.790569415042095,
4.67707173346743*t**3 - 2.80624304008046*t,
9.2807765030735*t**4 - 7.95495128834872*t**2 + 0.795495128834872]
Test des Orthonormalsystems ergibt die Einheitsmatrix:
m = [[dot(xi[i],xi[j]) for j in range(5)] for i in range(5)]
np.round(np.array(m,dtype=float),8)
array([[ 1., 0., 0., 0., -0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 1., 0.],
[-0., 0., 0., 0., 1.]])
tp = np.linspace(-1,1,400)
n = 0
plt.plot(tp,np.ones_like(tp),label='$P_'+str(n)+'(t)$')
for xii in xi[1:]:
n += 1
f = lambdify(t,xii,'numpy')
plt.plot(tp, f(tp),label='$P_'+str(n)+'(t)$')
plt.grid()
plt.legend()
plt.show()
Das Resultat sind bezüglich der \(L_2\)-Norm normierte Legendre’sche Polynome. Üblicher weise werden die Polynome mit \(P_n(1) = 1\) normiert:
tp = np.linspace(-1,1,400)
n = 0
plt.plot(tp,np.ones_like(tp),label='$P_'+str(n)+'(t)$')
for xii in xi[1:]:
n += 1
f = lambdify(t,xii,'numpy')
plt.plot(tp, f(tp)/f(1),label='$P_'+str(n)+'(t)$')
plt.grid()
plt.legend()
plt.show()
Die ersten fünf Legendre’sche Polynome sind gegeben durch:
lp = [xii/xii.subs(t,1) for xii in xi]
print(lp)
[1.00000000000000, 1.0*t, 1.5*t**2 - 0.5, 2.5*t**3 - 1.5*t, 4.375*t**4 - 3.75*t**2 + 0.375]
Beispiel zur Fourierentwicklung¶
import numpy as np
from sympy import symbols, integrate, lambdify, exp, sin, cos, pi
import scipy.integrate as scint
import matplotlib.pyplot as plt
Für das Beispiel benutzen wir zwei verschiedene orthonormale Basen für den \(L_2[-1,1]\)
t = symbols('t')
def dot(x,y):
return integrate(x*y,(t,-1,1))
def norm(x):
return dot(x,x)**(1/2)
def dotN(x,y):
xy = lambdify(t, x*y,'numpy')
return scint.quad(xy, -1, 1)[0]
def normN(x):
return dotN(x,x)**(1/2)
Legendre’sche Polynome¶
# Orthonormalbasis nach Schmidt
N = 9
yi = [t**i for i in range(N)]
xi = [yi[0]/norm(yi[0])]
for i in range(1,N):
s = 0
for j in range(i):
s += dot(yi[i],xi[j])*xi[j]
zi=yi[i]-s
xi.append(zi/norm(zi))
xi
[0.707106781186547,
1.22474487139159*t,
2.37170824512628*t**2 - 0.790569415042095,
4.67707173346743*t**3 - 2.80624304008046*t,
9.2807765030735*t**4 - 7.95495128834872*t**2 + 0.795495128834872,
18.4685120543048*t**5 - 20.5205689492276*t**3 + 4.39726477483448*t,
36.8085471137468*t**6 - 50.1934733369281*t**4 + 16.7311577789763*t**2 - 0.796721798998898,
73.4290553655431*t**7 - 118.616166359723*t**5 + 53.9164392544196*t**3 - 5.99071547271328*t,
146.570997825634*t**8 - 273.599195941123*t**6 + 157.845689965986*t**4 - 28.6992163574405*t**2 + 0.797200454372895]
f = exp(-5*t**2)
fn = lambdify(t, f, 'numpy')
tp = np.linspace(-1,1,400)
plt.plot(tp, fn(tp))
plt.grid()
plt.show()
alpha = [dotN(f, xii) for xii in xi]
alpha
[0.5596217150491691,
0.0,
-0.4411693576778274,
0.0,
0.2148123794839546,
0.0,
-0.07762200243541717,
0.0,
0.0221421344164393]
s = 0
for alphai, xii in zip(alpha,xi):
s += alphai*xii
sn = lambdify(t, s, 'numpy')
s
tp = np.linspace(-1,1,400)
plt.plot(tp, fn(tp),label='f(t)')
plt.plot(tp, sn(tp),label='Legendre Basis')
plt.legend()
plt.grid()
plt.show()
Parsevallsche Gleichung (Vollständigkeitsrelation):
np.sum(np.array(alpha)**2)-normN(f)**2
-2.810714668699532e-05
Trigonometrische Funktionen¶
# Orthonormalbasis nach Schmidt
yi = []
N = 5
yi.append(1/2)
for i in range(1,N):
yi.append(cos(pi*i*t))
yi.append(sin(pi*i*t))
print('Anzahl Basisfunktionen: '+str(len(yi)))
xi = [yi[0]/normN(yi[0])]
for i in range(1,2*N-1):
s = 0
for j in range(i):
s += dotN(yi[i],xi[j])*xi[j]
zi=yi[i]-s
xi.append(zi/normN(zi))
Anzahl Basisfunktionen: 9
xi
[0.7071067811865475,
1.0*cos(pi*t) - 9.81307786677359e-17,
1.0*sin(pi*t),
-1.22011185168313e-17*cos(pi*t) + 1.0*cos(2*pi*t) + 1.03037317601123e-16,
-9.90337261694782e-18*sin(pi*t) + 1.0*sin(2*pi*t),
1.23822596516741e-33*cos(pi*t) - 1.01484627287186e-16*cos(2*pi*t) + 1.0*cos(3*pi*t) - 1.58362563377161e-17,
2.04850984122971e-34*sin(pi*t) - 2.0684971882448e-17*sin(2*pi*t) + 1.0*sin(3*pi*t),
-4.42531299261824e-17*cos(pi*t) + 1.31330734865152e-16*cos(2*pi*t) + 8.86382073502645e-17*cos(3*pi*t) + 1.0*cos(4*pi*t) - 3.92523114670944e-17,
7.95881701368516e-17*sin(pi*t) - 1.53007052862912e-17*sin(2*pi*t) - 6.41357085318366e-17*sin(3*pi*t) + 1.0*sin(4*pi*t)]
alpha2 = [dotN(f, xii) for xii in xi]
alpha2
[0.5596217150491691,
0.4850805845912827,
0.0,
0.10914699708164807,
0.0,
0.010077740674845966,
0.0,
-0.00025517128989830523,
0.0]
s2 = 0
for alphai, xii in zip(alpha2,xi):
s2 += alphai*xii
s2n = lambdify(t, s2, 'numpy')
s2
tp = np.linspace(-1,1,400)
plt.plot(tp, fn(tp),label='f(t)')
plt.plot(tp, sn(tp),label='Legendre Basis')
plt.plot(tp, s2n(tp),label='trigonometrische Basis')
plt.legend()
plt.grid()
plt.show()
Parsevallsche Gleichung (Vollständigkeitsrelation):
np.sum(np.array(alpha2)**2)-normN(f)**2
-4.505698535384184e-07
Vergleich¶
plt.plot(tp, sn(tp)-fn(tp),label='Legendre Basis')
plt.plot(tp, s2n(tp)-fn(tp),label='trigonometrische Basis')
plt.legend()
plt.grid()
plt.show()
Lineare Operatoren¶
Viele Aufgaben in der Mathematik und den Anwendungen führen auf Gleichungen der Form
wobei \(T: X \to Y\) eine „lineare Abbildung“, \(X, Y\) normierte Räume sind und \(y\in Y\) ein gegeben ist.
Definition: lineare Abbildung
Die Abbildung \(T\) des normierten Raumes \(X\) in den normierten Raum \(Y\) heisst linear, wenn für alle \(x,y \in X\) und alle \(\alpha \in \mathbb{K}\)
Beschränkte lineare Operatoren¶
Analog zum Stetigkeitsbegriff aus der Analysis definiert man die Stetigkeit und Beschränktheit bei linearen Operatoren wie folgt:
Definition: stetig
Sei \(T: X\to Y\) ein linearer Operator und \(X, Y\) normierte Räume. Der lineare Operator \(T\) heisst stetig in \(x_0\in X\), wenn es zu jedem \(\varepsilon > 0\) ein \(\delta = \delta(\epsilon, x_0)>0\) gibt, so dass
gilt. Man nennt \(T\) stetig in \(X\), wenn \(T\) in jedem Punkt von \(X\) stetig ist.
Definition: beschränkt
Es seien \(X, Y\) normierte Räume. Der lineare Operator \(T: X \to Y\) heisst beschränkt, wenn es eine Konstante \(C>0\) mit
gibt.
Die Menge aller linearen Abbildungen mit der sogenannten Operatornorm versehen, liefert uns wieder einen normierten Vektorraum. Die Operatornorm (vgl. Matrixnorm aus der Numerik oder linearen Algebra) ist gegeben durch
Definition: Operatornorm
Die kleinste Zahl \(C>0\) für die (14) gilt, heisst Operatornorm von \(T\) und ist durch
definiert.
Bemerkung: Mit der Norm von \(T\) lässt sich die Ungleichung (14) auch in der Form
schreiben. Die Operatornorm lässt sich anstelle der Schreibweise (15) auch durch
schreiben.
Zwischen stetigen und beschränkten Operatoren besteht der Zusammenhang
Satz
Sei \(T: X\to Y\) ein linearer Operator und \(X,Y\) normierte Räume. Dann gilt
Beweis: a) Sei \(T\) beschränkt durch \(C>0\) und \(x_0\in X\) beliebig. Wir zeigen nun, dass es zu jedem \(\varepsilon>0\) ein \(\delta=\delta(x_0)\) gibt, so dass
Wähle \(\delta = \frac{\epsilon}{C}\), dann folgt
dh. \(T\) ist in \(x_0\) stetig und da \(x_0\in X\) beliebig ist, in ganz \(X\).
b) Sei nun \(T\) auf \(X\) stetig. Wir zeigen im Widerspruch, dass \(T\) beschränkt ist. Daher nehmen wir an: \(T\) sei nicht beschränkt. Also gibt es eine Folge \(\{x_k\} \subset X\) mit \(x_k \not=0\) und \(\frac{\|T x_k\|_Y}{\|x_k\|_X} > k\) für alle \(k\in \mathbb{N}\). Setze nun \(y_k = \frac{x_k}{k \|x_k\|_X}\), so folgt \(y_k\in X\) und
für alle \(k\in \mathbb{N}\). Andererseits gilt: \(\|y_k\|_X = \frac{1}{k} \to 0\) für \(k\to \infty\) bzw. \(y_k \to 0\). Aus der Stetigkeit von \(T\) in \(0\) folgt \(T y_k \to 0\) für \(k\to\infty\), was im Widerspruch zu (16) steht. \(\Box\)
Bei linearen Operatoren sind Stetigkeit und Beschränktheit äquivalente Eigenschaften.
Beispiel: Sei \(X=Y=C[a,b]\), \(f\in C[a,b]\) und \(\|f\| = \max_{a\le x \le b} |f(x)|\). Betrachte den Integraloperator \(T\) mit
mit \(K: [a,b] \times [a,b] \to \mathbb{R}\) stetigem Kern.
\(T\) ist ein linearer Operator, der \(C[a,b]\) auf sich abbildet.
Da \(f\) stetig auf \([a,b]\) ist, ist \(f\cdot K\) stetig auf \([a,b]\times [a,b]\) und damit ist auch (vgl. Satz 7.17 in [BWHM17])
\[F(x) := \int_a^b K(x,y) f(y) dy\]stetig auf \([a,b]\).
Da \(K\) stetig auf \([a,b] \times [a,b]\) ist, existiert
\[M = \max_{x,y \in [a,b]} |K(x,y)|\]und somit
\[\|T f|| = \max_{x\in[a,b]} |(T f)(x)| \le \max_{x\in[a,b]} \int_a^b |K(x,y)| |f(y)| dy \le M\,\max_{x\in[a,b]} |f(x)|\ \int_a^b 1 dy = M\,(b-a)\,\|f\|.\]Damit ist \(T\) bezüglich der Maximumsnorm beschränkt. Es gilt
\[\|T\| = \sup_{\|f\|=1} \|T f\| \le M\, (b-a).\]
Satz
Seien \(X, Y\) normierte Räume und mit \(L(X,Y)\) die Menge aller beschränkten linearen Operatoren von \(X\) in \(Y\) bezeichnet. Dann ist \(L(X,Y)\) bezüglich der Operatornorm
wieder ein normierter Raum.
Ist \(X\) ein normierter Raum und \(Y\) ein Banachraum, dann ist \(L(X,Y)\) ein Banachraum.
Lineare Funktionale¶
Wir betrachten nun spezielle lineare Operatoren, welche in den zugrunde liegenden Zahlenkörper abbilden.
Definition: lineares Funktional
Sei \(X\) ein normierter Raum. Dann nennt man den Operator \(F: X \to \mathbb{K}\) (\(\mathbb{R}\) oder \(\mathbb{C}\)) lineares Funktional.
Normiert man \(\mathbb{K}\) mit
so ist \(\mathbb{K}\) ein Banachraum und damit die Menge aller beschränkten linearen Funktionale auf \(X\) ein Banachraum. Dieser Raum ist insbesondere im Zusammenhang mit partiellen Differentialgleichungen sehr wichtig.
Dualraum von \(X\)
Der Banachraumm \(L(X,\mathbb{K})\) aller beschränkten linearen Funktionale auf \(X\) heisst der zu \(X\) konjugierte oder duale Raum und wird mit \(X^*\) oder \(X'\) bezeichnet.
Beispiel: Sei \(X\) ein Hilbertraum und \(y_0\) ein beliebiges (festes) Element aus \(X\). Für \(x\in X\) wird durch
ein lineares Funktional \(F\) definiert. (Die Linearität folgt direkt aus den Eigenschaften des Skalarprodukts.) Mit Hilfe der Schwarzschen Ungleichung folgt
Damit folgt
sprich \(F\) ist ein beschränktes lineares Funktional, \(F\in X^*\) mit \(\|F\| \le \|y_0\|\). Da für \(x=y_0\)
gilt, folgt
Wir kommen nun zum Rieszschen Darstellungssatz: Beschränkte lineare Funktionale eines Hilbertraumes \(X\) lassen sich besonders einfach darstellen. Die Darstellung aus obigem Beispiel erfasst alle beschränkten linearen Funktionale. Es gilt
Satz: Darstellungssatz von Riesz
Sei \(X\) ein Hilbertraum und \(F\in X^*\) beliebig. Dann gibt es ein eindeutig bestimmtes \(y\in X\), so dass \(F\) die Darstellung
besitzt.
Bemerkung: Dieser Satz ist das zentrale Ergebnis der Hilbertraum-Theorie. Neben seiner Bedeutung als Darstellungssatz kann er auch als Existenz- und Eindeutigkeitsprinzip aufgefasst werden. Diese Bedeutung des Rieszschen Satzes ist Grundlage für die moderne Theorie der elliptischen partiellen Differentialgleichungen.
Sobolevräume¶
Im Kapitel stellen wir die für die Behandlung von partiellen Differentialgleichungen geeigneten Funktionenräume vor. In den Beispielen für Hilberträume wurde erwähnt, dass der Funktionenraum der stetigen Funktionen versehen mit der Quadratnorm \(\|x\|_2 = \sqrt{\int_a^b |x(t)|^2 dt}\) nicht vollständig und damit kein Banachraum ist. Das Problem muss für die Behandlung der partiellen Differentialgleichungen gelöst werden und führt uns zu den sogenannten Sobolevräumen.
Hilbertraum \(L_2(\Omega)\)¶
Da der Fokus in der Bearbeitung von partiellen Differentialgleichungen liegt, werden wir im Folgenden Funktionen auf beliebigen \(n\) dimensionalen Gebieten \(\Omega \subset \mathbb{R}^n\) und nicht nur zwingend auf Intervallen \([a,b] \subset \mathbb{R}\) betrachten.
Sei daher das Integrationsgebiet bzw. der Definitionsbereich der Funktion gegeben durch \(\Omega\) eine beliebige (nichtleere) offene Menge in \(\mathbb{R}^n\). Mit \(C(\Omega)\) bezeichnen wir die Menge aller stetigen Funktionen auf \(\Omega\).
Definition: Support
Für \(f\in C(\Omega)\) definieren wir den Träger oder Support von \(f\) durch
wobei mit \(\overline{A}\) die Abschliessung einer Menge \(A \subset \mathbb{R}^n\) bezeichnet.
Mit \(C_0(\Omega)\) bezeichnen wir stetige Funktionen mit beschränktem Support in \(\Omega\). Das Integral für \(f\in C_0(\Omega)\) existiert: mit \(a>0\) hinreichend gross gilt
Abb. 3 Berechnung von \(\int_\Omega f(x) dx\) in \(\mathbb{R}^2\).¶
Definition: \(C_0^\infty(\Omega)\) und \(L_2(\Omega)\)
Mit \(C_0^\infty(\Omega)\) bezeichnen wir die Menge aller Funktionen, welche in \(\Omega\) beliebig oft stetig differenzierbar sind und einen beschränkten in \(\Omega\) enthaltenen Support haben.
Mit der Quadratnorm
definieren wir \(L_2(\Omega)\) als den zu \((C_0^\infty(\Omega),\|\cdot\|_2)\) konjugierten (dualen) Raum:
Man kann zeigen, dass sich die klassischen Funktionen aus \(C_0^\infty(\Omega)\) in \(L_2(\Omega)\) wiederfinden. Mathematisch bedeutet das, dass \(C_0^\infty(\Omega)\) als Unterraum von \(L_2(\Omega)\) aufgefasst werden kann.
\[C_0^\infty(\Omega) \subset L_2(\Omega)\]
Man sagt in dem Fall, \(C_0^\infty(\Omega)\) ist in \(L_2(\Omega)\) eingebettet. Es gilt
Satz
Es gilt:
\(C_0^\infty(\Omega)\) liegt dicht in \(L_2(\Omega)\)
\(\overline{C_0^\infty(\Omega)}\) ist vollständig.
\(L_2(\Omega) = \overline{C_0^\infty(\Omega)}\)
Sobolevräume¶
Mit den Sobolevräumen kommt nun die Ableitung von Elemente aus dem \(L_2(\Omega)\) ins Spiel. Wir definieren den Sobolevraum \(H^k(\Omega)\) wie folgt
Definition: Sobolevraum \(H^k(\Omega)\)
Unter dem Sovolevraum \(H^k(\Omega)\) versteht man den linearen Raum aller linearen Funktionale \(F\) auf \(C_0^\infty(\Omega)\), für die \(F\) und sämtliche Ableitungen \(D^pF\) der Ordnung \(|p|\le m\) zu \(L_2(\Omega)\) gehören:
Mit \(x = (x_1, \ldots, x_n)^T \in \mathbb{R}^n\), dem Multiindex \(p = (p_1, \ldots, p_n)\), \(p_i\in \mathbb{N}_0\) für \(i=1,\ldots, n\) und
sowie \(|p| = p_1 + \ldots + p_n\).
Nicht klar ist an dieser Stelle, was \(D^p F\) zu bedeuten hat, da \(F\) ein beschränktes lineares Funktional ist. Der klassische Ableitungsbegriff genügt nicht der in der Definition benutzten Ableitung, da dieser für Funktionale verallgemeinert werden muss.
Betrachten wir das Ganze mit Hilfe eines eindimensionalen Gebietes \(\Omega = [0,1]\) und für Funktionale \(F_u \in L_2([0,1])\), welche durch Funktionen \(u\in C^1([0,1])\) induziert sind:
Die Ableitung \(\frac{\partial}{\partial x} F_u\) definieren wir wie folgt:
\[\frac{\partial}{\partial x} F_u := F_{\frac{\partial u}{\partial x}}\]
Mit der Definition und partieller Integration erhalten wir
Wir erhalten somit
Oder für mehrdimensionale Gebiete \(\Omega\)
Damit können wir eine verallgemeinerte Ableitung definieren, welche auch auf Funktionen \(u(x)\), welche selber nicht im klassischen Sinne differenzierbar sind, anwendbar ist:
Definition: Verallgemeinerte Ableitung (generalized derivative)
Für \(u\in L_2(\Omega)\) definieren wir \(g \in L_2(\Omega)\) als die verallgemeinerte Ableitung \(D^pu\) von \(u\) wobei
Eine äquivalente oft benutzte Definition der Sobolevräume (leicht allgemeinere) baut auf den lokal integrierbaren Funktionen auf \(\Omega\) auf, gegeben durch
Der Raum \(L_1^{\text{loc}}\) beinhaltet Funktionen, welche sich sehr schlecht in der Nähe des Randes \(\partial\Omega\) verhalten können.
Beispiele:
\(e^{e^{1/x}}\) ist in \(L_1^{\text{loc}}(0,1)\).
Ist \(\Omega\) unbeschränkt, dann ist die Funktion 1 in \(L_1^{\text{loc}}(\Omega)\), aber nicht in \(L_1\). Ist zum Beispiel \(\Omega = \mathbb{R}^n\), dann gilt
Definition: Sobolev Räume \(W_p^k(\Omega)\)
Sei \(k\in\mathbb{N}_0\) und \(1 \le p < \infty\), dann definieren wir die Sobolev Normen mit
und die Sobolev Räume mit
Ohne Beiweis gilt der Satz
Satz
Die Sobolev Räume \(W_p^k(\Omega)\) sind Banach Räume. Die Sobolev Räume \(W_2^k(\Omega) = H^k(\Omega)\) sind Hilberträume.
Beispiel: Wir werden primär den Sobolev Raum \(W_2^1(\Omega) = H^1(\Omega)\) benutzen. Hier gilt für die Norm
und das Skalarprodukt
Variationsrechnung¶
Das Kapitel baut auf dem Buch [Kie10] auf.
Einführendes Beispiel¶
Wir beginnen mit einem eindimensionalen Problem: gesucht ist \(u\in C^1(a,b)\) so, dass
gilt.
Wie in der Analysis reeller Funktionen soll für das Beispiel ein notwendiges Kriterium für eine Extremalstelle des Funktionals berechnet werden. Für die Herleitung gehen wir davon aus, dass \(u(x)\) ein Minimierer des Funktionals \(J\) ist. Diesen stören wir mit einer beliebigen Funktion \(v(x) \in C_0^\infty(a,b)\). Das bedeutet, dass \(v\) beliebig oft stetig differenzierbar ist und \(v(a) = v(b) = 0\) gilt. Wir betrachten daher \(J(u(x) + \varepsilon v(x))\). Falls \(u(x)\) eine Extremalstelle ist, so muss
gelten.
Abb. 4 Störung der Funktion \(u(x)\) durch \(\varepsilon v(x)\)¶
Wir berechnen daher
Es folgt die schwache Gleichung
Unter der Voraussetzung, dass \(u \in C^2(a,b)\) gilt, folgt mit Hilfe der partiellen Integration
und somit
Der Fundamentalsatz der Variationsrechnung besagt, dass die Gleichung nur dann erfüllt sein kann, wenn die starke Gleichung
gilt.
Wie aus dem Beispiel zu sehen ist, sind die Ansprüche an die Regularität in der starken Gleichung in der Regel grösser als die der schwachen Gleichung. Für skalare Funktionen ist das in der Regel kein grösseres Problem. Hingegen im Mehrdimensionalen führt dies zur Regularitätstheorie. Es muss studiert werden, wann eine schwache Lösung auch eine starke ist. Dies hängt im Mehrdimensionalen mit unter auch vom Gebiet \(\Omega \subset \mathbb{R}^n\) ab.
Im Beispiel sind ein paar Grundkonzepte enthalten, welche wir wie folgt festhalten
Das Gâteaux-Differential muss nicht zwingend linear noch stetig in \(v\) sein.
Definition: Fréchet-Ableitung
Existiert \(dJ(u,v)\) in \(u\in D \subset X\) für \(v\in X\) und ist \(dJ(u,v)\) linear in \(v\), so heisst \(dJ(u,v)\) die erste Variation oder Fréchet-Ableitung von \(J\) in Richtung \(v\). Wir schreiben in dem Fall
Ist dies für alle \(v\in D\subset X\) richtig, wobei \(D\) ein Unterraum von \(X\) ist, so ist
ein lineares Funktional.
Betrachten wir obiges Beispiel noch im mehrdimensionalen: gesucht ist \(u\in H_0^1(\Omega)\) so, dass
gilt.
Wir berechnen die Gâteaux-Ableitung
Die Gâteaux-Ableitung ist linear in \(v\) und somit die erste Variation des Funktionals \(J : H_0^1(\Omega) \to \mathbb{R} \).
Mit der Forderung für einen Extremalpunkt \(J'(u) v = 0\) für alle \(v\in H_0^1(\Omega)\) haben wir die schwache Gleichung (vgl. Einleitung Poisson Gleichung (3))
Mit Hilfe des Gauss-Theorem oder partiellen Integration im mehrdimensionalen folgt die starke Gleichung (partielle Differentialgleichung)
mit der Dirichlet Randbedingung \(u(x) = 0\) auf dem Rand \(\partial\Omega\).
Bemerkung
Halten wir fest: Durch Testen der partiellen Differentialgleichung erhalten wir die schwache Gleichung, welche dem notwendigen Kriterium (Fréchet-Ableitung ist Null) eines zu (typischerweise) minimierenden Funktionals entspricht.
Euler-Lagrange Gleichung¶
Für die Herleitung der formalen Euler-Lagrange Gleichung beschränkten wir uns auf eindimensionale Probleme. Wir betrachten das zu minimierende Funktional
welches auf \(C^1(a,b)\) definiert ist.
Definition: lokaler Minimierer
Sei \(X\) ein Banachraum. Eine Funktion \(u\in X\) heisst lokaler Minimierere für das Funktional \(J : X \to \mathbb{R}\), falls
mit einer Konstante \(\delta > 0\) gilt.
Analog wird ein lokaler Maximierer definiert. Man beschränkt sich in der Regel auf Minimierer und betrachtet für Maximierer das Funktional \(-J\).
Wir betrachten nun das Funktional (17) und berechnen die Gâteaux-Ableitung für beliebiges \(v\in C_0^1(a,b)\)
Partielle Integration des zweiten Summanden liefert
Da \(v\in C_0^1(a,b)\) folgt \(v(a) = v(b) = 0\) und damit
Wir können damit folgenden Satz festhalten:
Satz
Die Funktion \(u\in C^1(a,b)\) sei ein lokaler Minimierer für das Funktional (17) und die Lagrange-Funktion \(F: [a,b] \times \mathbb{R} \times \mathbb{R}\) sei stetig und bezüglich der letzten beiden Variablen stetig partiell differenzierbar. Dann gilt die Euler-Lagrange-Gleichung
Bemerkungen:
Wir haben den Satz für stetige Funktionen auf ganz \([a,b]\) notiert. Das ganze lässt sich leicht auf stückweise stetige Funktionen verallgemeinern.
Im hier notierten Fall von Funktionen in einer Variablen \(x\) gilt, dass eine Lösung der schwachen Gleichung
\[\int_a^b \left(\partial_{u} F(x,u,u')\cdot v + \partial_{u'} F(x,u,u')\cdot v' \right) dx = 0\quad \forall\ v\in C_0^1(a,b)\]auch Lösung der starken Gleichung (18) ist.
Ist die Lagrange-Funktion nicht explizit von \(x\) abhängig, können wir die Lagrange-Gleichung umformen - vorausgesetzt die Regularität von \(y\) erlaubt ein zweimaliges Ableiten.
Es gilt
\[\begin{split}\begin{split} \frac{d}{dx} (F - u' F_{u'}) & = F_u u' + F_{u'} u'' - u'' F_{u'} - u' \frac{d}{dx} F_{u'}\\ & = \underbrace{\left(F_u - \frac{d}{dx} F_{u'}\right)}_{=0\, (*)} \cdot \underbrace{u'}_{=0\, (**)} = 0\quad \text{für}\, x\in [a,b].\end{split}\end{split}\]Daraus folgt, dass jede Lösung der Euler-Lagrange-Gleichung \((*)\) und jede Konstante \((**)\) ebenfalls Lösung der Differentialgleichung erster Ordnung
(19)¶\[F(u,u') - u' F_{u'}(u,u') = c_1\quad\text{für}\, x\in [a,b]\]ist.
Beispiele zur Lösung der Euler-Lagrange-Gleichung¶
Kürzeste Verbindung zweier Punkte¶
Wir betrachten in der Ebene zwei Punkte \((a,A), (b,B)\) und suchen nach der kürzesten Kurve, welche diese verbindet. Beschreibt man die Kurve mit einer Funktion \(y: [a,b] \to \mathbb{R}\), so können wir die Länge mit dem Funktional
berechnen. Gesucht ist daher ein Minimierer des Funktionals \(J(y)\). Die zugehörige Euler-Lagrange Gleichung lautet
Integration liefert
Durch auflösen nach \(y'\) und integrieren erhalten wir den Kanditaten für einen Minimierer
also eine Gerade zwischen den beiden Punkten. Die beiden Integrationskonstanten können aus den Randbedingungen \(y(a) = A\) und \(y(b) = B\) bestimmt werden. Es stellt sich natürlich die Frage, ist die Lösung ein Minimierer und falls ja ein globaler?
Analog zur Analysis reeller Funktionen kann auf für Funktionale unter geeigneten Voraussetzungen ein Kriterium, die zweite Variation, berechnet werden. Es gilt der Satz
Satz
Sei die Lagrange-Funktion (17) zweimal bezüglich den letzten beiden Variablen stetig partiell differenzierbar. Dann ist die zweite Variateion gegeben durch die Bilinearform
Für einen lokalen Minimierer \(u\) gilt neben der notwendigen Bedingung \(J'(u) v = 0\) die hinreichende Bedingung von Legendre
Gilt für alle \(w \in D\subset C^1(a,b) \cap \{w(a)=A, w(b)=B\}\)
so ist \(u\) ein globaler Minimierer von \(J\) auf \(D\).
Der Satz auf das Beispiel angewandt zeigt uns, dass wir globalen Minimierer gefunden haben.
Das Problem von Johann Bernoulli¶
Das original Problem wurde wie folgt beschrieben:
Wenn in einer vertikalen Ebene zwei Punkte A und B gegeben sind, soll man dem beweglichen Punkt M eine Bahn AMB anweisen, auf welcher er von A ausgehend vermöge seiner eigenen Schwere in kürzester Zeit nach B gelangt.
Der Punkt \(B\) liegt trivialerweise unterhalb von \(A\). Entsprechend wählen wir ein passendes Koordinatensystem gemäss Abb. 5.
Abb. 5 Gesucht ist die schnellste Bahn.¶
Wir parametrieren die Bahnkurve nach der Zeit \(t\): \(\{(x(t),y(t)\,|\, t \in [0,T])\}\). Dabei gilt \((x(0),y(0)) = (0,0)\) und \((x(T),y(t)) = (b,B)\). Die Laufzeit ist gegeben durch \(T\). Nach dem Energieerhaltungsgesetz ist die Summe der kinetischen und potentiellen Energie längs der Bahn konstant
Die Masse \(m\) ist offensichtlich nicht relevant. Mit \(h_0\) sei die Höhe zwischen \(A\) und \(B\) bezeichnet und mit \(g\) die Erdbeschleunigung. Für die Geschwindigkeit erhalten wir
Andererseits folgt aus dem parametrischen Ansatz für die Geschwindigkeit
Es gilt daher
Wir nutzen diese Identität um die Laufzeit zu berechnen
Mit der Transformation \(x=x(t)\) folgt \(dx = \dot{x}(t) dt\) und damit für das Integral
Für das zu minimierende Funktional erhalten wir
wobei wir den Faktor \(1/\sqrt{2g}\) weglassen, da das Resultat unabhängig davon ist. Die Graphitation beeinflusst die Kurvenform nicht.
Der Integrand des Funktional (20) ist für \(x=0\) unbestimmt, einerseits kann aus physikalischen Gründen \(y'(0) = +\infty\) sein und andererseits gilt \(y(0) = 0\). Das Integral ist daher als uneigentliches Integral zu verstehen. Zu dem ist \(J\) nur auf \((0,b]\) positive Funktionen \(y(x)\) definiert. Deshalb legen wir die zulässigen Funktionen wie folgt fest:
Die Lagrange-Funktion hat im Beispiel die spezielle Eigenschaft, dass sie nicht explizit von \(x\) abhängig ist. Daher benutzen wir die Form (19), womit die Differentialgleichung
folgt. Die Differentialgleichung kann in dieser nicht geschlossen gelöst werden. Daher wechseln wir wieder in die parametrische Form
wobei \(s\) nicht die physikalische Zeit ist. Es gilt
Die Differentialgleichung (21) eingesetzt liefert
Es kann gezeigt werden, dass
für \(s\in [0,s_b]\) Lösung und damit Lösungskurve der Aufgabe ist. Die Bahnkurve wird Brachystochrone genannt und durch eine Zykloide beschrieben. Der Parameter \(r\) ist gegeben durch
und \(s_b\) ist implizit gegeben durch die Gleichung
import matplotlib.pyplot as plt
import numpy as np
f = lambda sb : (sb - np.sin(sb))/(1-np.cos(sb))
from scipy.optimize import fsolve
from myst_nb import glue
b=8
B=1
sb = fsolve(lambda s: f(s)-b/B,5)[0]
r = B/(1-np.cos(sb))
glue("sb_example", np.round(sb,4),display=False)
glue("r_example", np.round(r,4),display=False)
sbi = np.linspace(1e-3,2*3.14,400)
plt.plot(sbi, f(sbi),label='$f(s_b)$')
plt.legend()
plt.axvline(np.pi,c='gray')
plt.axhline(np.pi/2,c='gray')
plt.grid()
plt.ylim(0,10)
plt.title('$f(s_b)$ ist monoton wachsend')
plt.xlabel('$s_b$')
plt.ylabel('$b/B$')
plt.show()
Die Funktion \(f(s_b)\) ist monoton wachsend. Für \(b/B \ge \pi/2\) gilt \(s_b \in [\pi, 2\pi]\). Das bedeutet, dass das Minimum der Bahnkurve tiefer als der Punkt \(B\) liegt. Für \(b=8\) und \(B=1\) folgt \(s_b =\) 4.9729 und \(r = \) 1.347. Damit können wir die Bahnkurve visualisieren:
sbi = np.linspace(0,sb,400)
plt.plot(r*(sbi-np.sin(sbi)),-r*(1-np.cos(sbi)))
plt.grid()
plt.gca().set_aspect(1)
plt.xlabel('x')
plt.ylabel('-y')
plt.title('Bahnkurve')
plt.show()
Einführung PDE¶
Unter Zuhilfenahme von Differentialoperatoren können Gleichungen für Funktionen notiert werden. Solche Gleichungen nennt man Differentialgleichungen. Eine gewöhnliche Differentialgleichung (ODE) erfordert die Differentiation bezüglich einer Variablen.
Beispiele:
Lineare ODE 2. Ordnung
\[-u''(x) + u(x) = f(x).\]Nichtlineare ODE 1. Ordnung
\[u'(x) = e^{-u(x)}\]
Numerik für partielle Differentialgleichungen¶
Anwendungen¶
Anwendungen
Literaturverzeichnis¶
- BWHM10
Klemens Burg, Friedrich Wille, Herbert Haf, and Andreas Meister. Partielle Differentialgleichungen und funktionalanalytische Grundlagen. Vieweg + Teubner Verlag, 2010. URL: https://www.springer.com/de/book/9783834812940.
- BWHM17
Klemens Burg, Friedrich Wille, Herbert Haf, and Andreas Meister. Höhere Mathematik für Ingenieure Band I: Analysis. Vieweg + Teubner Verlag, 2017. URL: https://www.springer.com/de/book/9783834824387.
- Heu06
Harro Heuser. Funktionalanalysis. Vieweg + Teubner Verlag, 2006. URL: https://www.springer.com/de/book/9783835100268.
- Heu08
Harro Heuser. Lehrbuch der Analysis. Volume 2. Vieweg + Teubner Verlag, 2008. URL: https://www.springer.com/de/book/9783322968128.
- Kie10
Hansjörg Kielhöfer. Variationsrechnung, Eine Einführung in die Theorie einer unabhängigen Variablen mit Beispielen und Aufgaben. Vieweg+Teubner Verlag, 2010. URL: https://www.springer.com/de/book/9783834809650.
- SHL21
Joachim Schöberl, Matthias Hochsteger, and Christopher Lackner. Interactive introduction to the Finite Element Method. TU Wien, 2021. URL: https://github.com/JSchoeberl/iFEM.
- S+21
Joachim Schöberl and others. NGSolve Documentation. TU Wien, 2021. URL: https://ngsolve.org.